package carregarcasosdeteste;

import java.lang.reflect.Method;
import java.util.LinkedList;

import entidadesparaguardardadosteste.CasoDeTeste;
import gui.DeclaracaoDeMetodo;
import gui.FachadaManipulacaoClassesDeUmProjeto;

/*Method nao eh uma classe serializavel e por isso na hora que carregamos os casos de teste
 * com base em um projeto antigo, nao podeos usar os mesmos metodos. Faremos o seguinte:
 * pegaremos esses metodos novamente da classe FachadaManipulacaoClassesDeUmProjeto, so
 * precisamos dos cabecalhos dos metodos*/
public class EditaMetodosDosCasosDeTesteDeUmProjetoCarregado 
{
	private LinkedList<CasoDeTeste> casosDeTesteJaCarregados;
	private LinkedList<CasoDeTeste> casosDeTesteComMetodosModificados;

	public EditaMetodosDosCasosDeTesteDeUmProjetoCarregado(LinkedList<CasoDeTeste> casosDeTesteJaCarregados)
	{
		this.casosDeTesteJaCarregados = casosDeTesteJaCarregados;
		casosDeTesteComMetodosModificados = new LinkedList<CasoDeTeste>();
	}
	
	public void mudarMetodosDosCasosCarregados()
	{
		for(int i = 0; i < this.casosDeTesteJaCarregados.size(); i++)
		{
			CasoDeTeste umCasoDeTeste = this.casosDeTesteJaCarregados.get(i);
			DeclaracaoDeMetodo declaracaoMetodoUmCaso = umCasoDeTeste.getMetodo();
			String cabecalhoDoMetodo = declaracaoMetodoUmCaso.getCabecalhoDoMetodo();
			String nomeClasseDoCasoDeTeste = umCasoDeTeste.getNomeClasseAssociadaAoCasoDeTeste();
			Method metodoRetiradoDaFachada = 
					FachadaManipulacaoClassesDeUmProjeto.getInstance().pegarMetodoDeNome(cabecalhoDoMetodo, nomeClasseDoCasoDeTeste);
			declaracaoMetodoUmCaso.setMetodoAssociado(metodoRetiradoDaFachada);
			//mudei o metodo associado para aquele que eu peguei da fachada
			umCasoDeTeste.setMetodo(declaracaoMetodoUmCaso);
			
			this.casosDeTesteComMetodosModificados.add(umCasoDeTeste);
		}
	}

	public LinkedList<CasoDeTeste> getCasosDeTesteComMetodosModificados() {
		return casosDeTesteComMetodosModificados;
	}

	public void setCasosDeTesteComMetodosModificados(
			LinkedList<CasoDeTeste> casosDeTesteComMetodosModificados) {
		this.casosDeTesteComMetodosModificados = casosDeTesteComMetodosModificados;
	}
	
	
}
